package com.glink.manage.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.glink.common.exception.GeneralSimpleException;
import com.glink.manage.domain.CryptoBean;
import com.glink.manage.dto.user.LoginDTO;
import com.glink.manage.dto.user.UserRestPwdDTO;
import com.glink.manage.dto.user.UserUpdatePwd2DTO;
import com.glink.manage.dto.user.UserUpdatePwdDTO;

import java.io.IOException;
import java.util.List;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : qiushaoshan
 * @create 2024/6/19 11:12
 */
public interface SecurityService extends IService<CryptoBean> {

    /**
     * 获取公钥
     * @param account 账号
     * @return 公钥
     */
    String findOnePublicKey(String account) throws GeneralSimpleException;

    /**
     * 获取私钥
     * @param account 账号
     * @return 私钥
     */
    String findOnePrivateKey(String account) throws GeneralSimpleException;

    /**
     * 获取随机字符串
     * @return 随机字符串
     */
    List<String> randomKey();

    /**
     * 生成token
     * @param loginDTO 登录信息
     * @param ip IP地址
     * @return token
     * @throws GeneralSimpleException 异常
     * @throws IOException 异常
     */
    String generateToken(LoginDTO loginDTO, String ip) throws GeneralSimpleException, IOException;

    /**
     * 注销token
     *
     * @param jwtToken token
     * @param remoteIp
     */
    void logout(String jwtToken, String remoteIp);

    /**
     * 查询token有效时间
     * @param jwtToken token
     * @return 有效时间
     */
    Long validTime(String jwtToken);

    /**
     * 修改密码
     * @param pwdDTO 密码信息
     * @return 修改状态
     */
    Boolean updatePwd(UserUpdatePwdDTO pwdDTO) throws GeneralSimpleException;

    /**
     * 重置密码
     *
     * @param restPwdDTO 重置密码信息
     * @param userId 当前用户ID
     * @return 重置状态
     */
    Boolean restPasswd(UserRestPwdDTO restPwdDTO, String userId) throws GeneralSimpleException;

    /**
     * 修改密码
     * @param userId 用户ID
     * @param pwdDTO 密码
     * @return 状态
     */
    Boolean updatePwd2(String userId, UserUpdatePwd2DTO pwdDTO) throws GeneralSimpleException;
}
